package com.dhecp.project.business.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.dhecp.core.genericDao.GenericDao;
import com.dhecp.project.business.domain.ProductActive;
import com.dhecp.project.business.domain.ProductActiveCompete;
import com.dhecp.project.business.domain.ProductActiveComponent;

/**
 * 商品库 DAO
 * @author DH-Xxj
 * @version 2022年8月11日
 */
public interface ProductActiveMapper extends GenericDao<ProductActive, String>{

	/**
     * 查询商品库
     * @param
     * @return List - ProductActive
	 * @author DH-Xxj
	 */
	List<ProductActive> findProductActive(Map<String, Object> params);
	
	/**
	*@Description: 查询在库存的商品
	*@Param: [params]
	*@return: java.util.List<com.dhecp.project.business.domain.ProductActive>
	*@Author: hlf
	*@date: 2023-01-09 13:49
	*/
	List<ProductActive> findStockProductActive(Map<String, Object> params);

	/**
	*@Description: 查询符合手工组装单的商品
	*@Param: [params]
	*@return: java.util.List<com.dhecp.project.business.domain.ProductActive>
	*@Author: hlf
	*@date: 2023-02-23 15:46
	*/
	List<ProductActive> findManualAssemblyData(Map<String, Object> params);

	/**
     * 查询商品子件
     * @param
     * @return List - ProductActiveComponent
	 * @author DH-Xxj
	 */
	List<ProductActiveComponent> findProductActiveComponent(Map<String, Object> params);

	/**
     * 查询商品竞品库
     * @param
     * @return List - ProductActiveCompete
	 * @author DH-Xxj
	 */
	List<ProductActiveCompete> findProductActiveCompete(Map<String, Object> params);

	/**
	 * 查询已选择的商品数据
	 * @param params
	 * @return
	 * @author DH-Xxj
	 */
	List<ProductActive> queryProductActiveList(Map<String, Object> params);
	/**
	 * 查询已选择的商品数据
	 * @param params
	 * @return
	 * @author DH-Xxj
	 */
	List<ProductActiveComponent> queryProductActiveComponentList(Map<String, Object> params);

	/**
	 * 显示所有listing库
	 */
	List<ProductActive> listAll();
	
	/**
     * 通过guid查询单条商品库
     * @param guid
     * @return 实体 ProductActive
	 * @author DH-Xxj
	 */
	ProductActive findProductActiveByGuid(@Param("guid") String guid);

	/**
	 * 通过code查询单条商品库
	 * @param code
	 * @return
	 */
	ProductActive findProductActiveByCode(@Param("code") String code);

	/**
     * 通过guid查询单条商品子件
     * @param guid
     * @return 实体 ProductActiveComponent
	 * @author DH-Xxj
	 */
	ProductActiveComponent findProductActiveComponentByGuid(@Param("guid") String guid);

	/**
     * 通过母件编码查找第一条子件
	 */
	ProductActiveComponent findFirstProductActiveComponentByPcode(@Param("pcode") String pcode);
	
	/**
     * 通过guid查询单条商品竞品库
     * @param guid
     * @return 实体 ProductActiveCompete
	 * @author DH-Xxj
	 */
	ProductActiveCompete findProductActiveCompeteByGuid(@Param("guid") String guid);
	
	/**
     * 通过pcode查询商品子件
     * @param pcode 必要参数：商品母件编码
     * @return List - ProductActiveComponent
	 * @author DH-Xxj
	 */
	List<ProductActiveComponent> findProductActiveComponentBypcode(@Param("pcode") String pcode);
	
	List<ProductActiveComponent> queryProductActiveComponentByCode(@Param("code") String code);
	
	ProductActiveComponent querySingleProductActiveComponentByCode(@Param("code") String code);

	/**
     * 通过pcode查询商品竞品库
     * @param pcode 必要参数：商品母件编码
     * @return List - ProductActiveCompete
	 * @author DH-Xxj
	 */
	List<ProductActiveCompete> findProductActiveCompeteBypcode(@Param("pcode") String pcode);

	/**
	 * 通过pcode查询基础商品子件
	 * @param pcode 必要参数：商品母件编码
	 * @return List - ProductActiveCompete
	 * @author DH-Xxj
	 */
	List<ProductActiveComponent> findInProductActiveComponentBypcode(Map<String, Object> params);
	
	/**
	 * 新增商品库
	 * @param productActive 必要参数：基础商品库实体 ProductActive
	 * @return
	 * @author DH-Xxj
	 */
	int insertProductActive(ProductActive productActive);
	
	/**
	 * 新增商品子件
	 * @param productActiveComponent 必要参数：基础商品子件实体 ProductActiveComponent
	 * @return
	 * @author DH-Xxj
	 */
	int insertProductActiveComponent(ProductActiveComponent productActiveComponent);

	/**
	 * 批量新增商品子件
	 * @param dataList
	 * @return
	 */
	int insertProductActiveComponentBatch(List<ProductActiveComponent> dataList);
	
	/**
	 * 新增商品竞品库
	 * @param productActiveCompete 必要参数：基础竞品库实体 ProductActiveCompete
	 * @return
	 * @author DH-Xxj
	 */
	int insertProductActiveCompete(ProductActiveCompete productActiveCompete);
	
	/**
     * 修改商品库
     * @param productActive 必要参数：基础商品库实体 ProductActive
	 * @return
	 * @author DH-Xxj
	 */
	int updateProductActive(ProductActive productActive);
	
	/**
     * 修改商品子件
     * @param productActiveComponent 必要参数：基础商品子件实体 ProductActiveComponent
	 * @return
	 * @author DH-Xxj
	 */
	int updateProductActiveComponent(ProductActiveComponent productActiveComponent);
	
	/**
     * 修改商品竞品库
     * @param productActiveCompete 必要参数：基础竞品库实体 ProductActiveCompete
	 * @return
	 * @author DH-Xxj
	 */
	int updateProductActiveCompete(ProductActiveCompete productActiveCompete);
	
	/**
	 * 通过guid删除商品库
	 * @param guid 必要参数：行唯一值
	 * @return
	 * @author DH-Xxj
	 */
	int deleteProductActiveByGuid(@Param("guid") String guid);
	
	/**
	 * 通过guid删除商品子件
	 * @param guid 必要参数：行唯一值
	 * @return
	 * @author DH-Xxj
	 */
	int deleteProductActiveComponentByGuid(@Param("guid") String guid);
	
	/**
	 * 通过guid删除商品竞品库
	 * @param guid 必要参数：行唯一值
	 * @return
	 * @author DH-Xxj
	 */
	int deleteProductActiveCompeteByGuid(@Param("guid") String guid);
	
	/**
	 * 通过pcode删除商品子件
	 * @param pcode 必要参数：商品母件编码
	 * @return
	 * @author DH-Xxj
	 */
	int deleteProductActiveComponentBypcode(@Param("pcode") String pcode);
	
	/**
	 * 通过pcode删除商品竞品库
	 * @param pcode 必要参数：商品母件编码
	 * @return
	 * @author DH-Xxj
	 */
	int deleteProductActiveCompeteBypcode(@Param("pcode") String pcode);
	
	/**
	 * 从商品库调入
	 * @param params
	 * @return List - ProductActive
	 * @author DH-Xxj
	 */
	List<ProductActive> callProductXG(Map<String, Object> params);
	
}
